/**
 * 消息系统模块导出文件
 * 统一导出所有消息相关的类、接口和枚举
 */

import { LOG } from '../../../ConsoleLogCtrl';
import { MessageManager } from './MessageManager';

// 核心类
export { MessageManager } from './MessageManager';
export { MessageDispatcher } from './MessageDispatcher';
export { MessageQueue } from './MessageQueue';
export { MessageUtils } from './MessageUtils';

// 类型定义
export {
    MessageType,
    MessagePriority
} from './MessageTypes';
export type {
    IMessage,
    IMessageSubscriber,
    IBattleEventData,
    IUnitEventData,
    IUIEventData,
    IAudioEventData,
    INetworkEventData,
    ISystemEventData,
    IMessageFilter,
    IMessageProcessResult
} from './MessageTypes';

/**
 * 消息系统版本信息
 */
export const MESSAGE_SYSTEM_VERSION = '1.0.0';

/**
 * 消息系统配置常量
 */
export const MESSAGE_CONFIG = {
    /** 默认消息处理间隔（毫秒） */
    DEFAULT_PROCESS_INTERVAL: 16,
    
    /** 默认每帧最大处理消息数 */
    DEFAULT_MAX_MESSAGES_PER_FRAME: 10,
    
    /** 默认最大队列大小 */
    DEFAULT_MAX_QUEUE_SIZE: 1000,
    
    /** 消息过期时间（毫秒） */
    DEFAULT_MESSAGE_EXPIRE_TIME: 30000, // 30秒
    
    /** 调试模式 */
    DEBUG_MODE: false
};

/**
 * 消息系统初始化函数
 * @param config 配置参数
 */
export function initMessageSystem(config?: {
    processInterval?: number;
    maxMessagesPerFrame?: number;
    maxQueueSize?: number;
    debugMode?: boolean;
}): void {
    if (config) {
        if (config.processInterval !== undefined) {
            MESSAGE_CONFIG.DEFAULT_PROCESS_INTERVAL = config.processInterval;
        }
        if (config.maxMessagesPerFrame !== undefined) {
            MESSAGE_CONFIG.DEFAULT_MAX_MESSAGES_PER_FRAME = config.maxMessagesPerFrame;
        }
        if (config.maxQueueSize !== undefined) {
            MESSAGE_CONFIG.DEFAULT_MAX_QUEUE_SIZE = config.maxQueueSize;
        }
        if (config.debugMode !== undefined) {
            MESSAGE_CONFIG.DEBUG_MODE = config.debugMode;
        }
    }
    
    LOG.log(`消息系统初始化完成 v${MESSAGE_SYSTEM_VERSION}`);
    if (MESSAGE_CONFIG.DEBUG_MODE) {
        LOG.log('消息系统配置:', MESSAGE_CONFIG);
    }
}

/**
 * 快速创建消息管理器实例
 * @param node 挂载的节点
 * @param config 配置参数
 */
export function createMessageManager(
    node: any, 
    config?: {
        processInterval?: number;
        maxMessagesPerFrame?: number;
    }
): MessageManager {
    const manager = node.addComponent(MessageManager);
    
    if (config) {
        if (config.processInterval !== undefined) {
            manager.messageProcessInterval = config.processInterval;
        }
        if (config.maxMessagesPerFrame !== undefined) {
            manager.maxMessagesPerFrame = config.maxMessagesPerFrame;
        }
    }
    
    return manager;
}

/**
 * 消息系统工具函数
 */
export const MessageSystemUtils = {
    /**
     * 检查消息系统是否已初始化
     */
    isInitialized(): boolean {
        return MessageManager.getInstance() !== null;
    },
    
    /**
     * 获取消息系统状态
     */
    getSystemStatus(): {
        initialized: boolean;
        version: string;
        config: typeof MESSAGE_CONFIG;
        statistics?: any;
    } {
        const manager = MessageManager.getInstance();
        return {
            initialized: manager !== null,
            version: MESSAGE_SYSTEM_VERSION,
            config: MESSAGE_CONFIG,
            statistics: manager?.getStatistics()
        };
    },
    
    /**
     * 打印系统状态
     */
    printSystemStatus(): void {
        const status = this.getSystemStatus();
        LOG.log('=== 消息系统状态 ===');
        LOG.log('版本:', status.version);
        LOG.log('已初始化:', status.initialized);
        LOG.log('配置:', status.config);
        if (status.statistics) {
            LOG.log('统计信息:', status.statistics);
        }
        LOG.log('==================');
    },
    
    /**
     * 启用调试模式
     */
    enableDebugMode(): void {
        MESSAGE_CONFIG.DEBUG_MODE = true;
        LOG.log('消息系统调试模式已启用');
    },
    
    /**
     * 禁用调试模式
     */
    disableDebugMode(): void {
        MESSAGE_CONFIG.DEBUG_MODE = false;
        LOG.log('消息系统调试模式已禁用');
    }
};